#ifndef NSTYLE_H
#define NSTYLE_H

#include <QObject>
#include <QWidget>
#include <QVariant>
#include <QIcon>
#include "GY_ControlLibrary_global.h"

/**
 * @brief The NStyle class  控件样式管理基类
 * 控制控件的样式添加、更新、修改
 */

class GY_CONTROLLIBRARY_EXPORT GY_NStyle
{
public:
    GY_NStyle(QWidget *targetWidget);

    /**
     * @brief addClass 追加指定类名样式
     * @param className
     */
    GY_NStyle* addClass(const QString &className);
    /**
     * @brief removeClass 移除指定类名样式
     * @param className
     */
    GY_NStyle* removeClass(const QString &className);
    /**
     * @brief setClass 设置当前控件样式为指定类名样式，（先移除原有的样式，使用当前类样式设置）
     * @param className
     */
    GY_NStyle* setClass(const QString &className);
    /**
     * @brief clearClass 移除所有样式
     */
    GY_NStyle* clearClass();
    /**
     * @brief setStyleProperty  设置行内样式，具有最高优先级，会覆盖之前的同属性样式。 如color:red
     * @param propertyName  样式属性名称 如: color | background-color
     * @param style 样式值 如：red | 12px | rgba(0,0,0,255)
     */
    GY_NStyle* setStyleProperty(const QString &propertyName , const QString &style);
    /**
     * @brief setValueStyle 根据值改变样式与setValue配合使用，当取值为xx时采用xx对应设置的类样式名称
     * @param value
     * @param className
     */
    GY_NStyle* setValueStyle(const QVariant &value , const QString &className , const QString &iconPath="");
    /**
     * @brief setValue 设置控件值,与setValueStyle配合使用，当取值为xx时采用xx对应设置的类样式名称
     * @param value
     */
    GY_NStyle* setNValue(const QVariant &value);
    /**
     * @brief updateStyle 刷新当前控件样式
     */
    GY_NStyle* updateStyle();

    /**
     * @brief setValueIcon 设置控件图标
     * @param key
     * @param icon
     */
    GY_NStyle* setValueIcon(const QVariant &key , const QString &icon);
    /**
     * @brief setValueIcon 设置控件图标
     * @param key
     * @param icon
     */
    GY_NStyle* setValueIcon(const QVariant &key , const QIcon &icon);

protected:
    /**
     * @brief m_valueMap 值对应的样式
     */
    QMap<QVariant , QString> m_valueMap;
    /**
     * @brief m_currentValue 控件当前值
     */
    QVariant m_currentValue;
    /**
     * @brief m_propertyValueMap 自定义属性样式集合  background-color => red
     */
    QMap<QString,QString> m_propertyValueMap;
    /**
     * @brief m_iconMap icon集
     */
    QMap<QVariant,QIcon> m_iconMap;
    /**
     * @brief m_classList 样式类集合
     */
    QStringList m_classList;
    /**
     * @brief widget 控件对象
     */
    QWidget *targetWidget=nullptr;
};

#endif // NSTYLE_H
